using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ConversionTools._ToCAD
{
    /// <summary>
    /// <para>Add CAD Fields</para>
    /// <para>Adds several reserved CAD fields in one step. Fields created by this tool are used by the Export To CAD tool to generate CAD entities with specific properties.   After executing this tool, you must calculate or type the appropriate field values.</para>
    /// <para>在一个步骤中添加多个保留的 CAD 字段。“导出至 CAD”工具使用此工具创建的字段来生成具有特定属性的 CAD 图元。  执行此工具后，必须计算或键入相应的字段值。</para>
    /// </summary>    
    [DisplayName("Add CAD Fields")]
    public class AddCADFields : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AddCADFields()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_input_table">
        /// <para>Input Table</para>
        /// <para>Input table, feature class, or shapefile that will have the CAD-specific fields added to it</para>
        /// <para>输入表、要素类或 shapefile，其中将添加 CAD 特定字段</para>
        /// </param>
        /// <param name="_Entities">
        /// <para>Entity Properties</para>
        /// <para><xdoc>
        ///   <para>Adds the list of CAD-specific Entity property fields to the input table</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Adds the list of CAD-specific Entity property fields to the input table. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Does not add the list of CAD-specific Entity property fields to the input table</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将特定于 CAD 的实体属性字段列表添加到输入表中</para>
        ///   <bulletList>
        ///     <bullet_item>选中 （Checked） - 将特定于 CAD 的实体属性字段列表添加到输入表中。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不将特定于 CAD 的实体属性字段列表添加到输入表中</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public AddCADFields(object _input_table, _Entities_value _Entities)
        {
            this._input_table = _input_table;
            this._Entities = _Entities;
        }
        public override string ToolboxName => "Conversion Tools";

        public override string ToolName => "Add CAD Fields";

        public override string CallName => "conversion.AddCADFields";

        public override List<string> AcceptEnvironments => ["extent", "scratchWorkspace", "workspace"];

        public override object[] ParameterInfo => [_input_table, _Entities.GetGPValue(), _LayerProps.GetGPValue(), _TextProps.GetGPValue(), _DocProps.GetGPValue(), _XDataProps.GetGPValue(), _out_table];

        /// <summary>
        /// <para>Input Table</para>
        /// <para>Input table, feature class, or shapefile that will have the CAD-specific fields added to it</para>
        /// <para>输入表、要素类或 shapefile，其中将添加 CAD 特定字段</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Table")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _input_table { get; set; }


        /// <summary>
        /// <para>Entity Properties</para>
        /// <para><xdoc>
        ///   <para>Adds the list of CAD-specific Entity property fields to the input table</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Adds the list of CAD-specific Entity property fields to the input table. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Does not add the list of CAD-specific Entity property fields to the input table</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将特定于 CAD 的实体属性字段列表添加到输入表中</para>
        ///   <bulletList>
        ///     <bullet_item>选中 （Checked） - 将特定于 CAD 的实体属性字段列表添加到输入表中。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不将特定于 CAD 的实体属性字段列表添加到输入表中</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Entity Properties")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _Entities_value _Entities { get; set; }

        public enum _Entities_value
        {
            /// <summary>
            /// <para>ADD_ENTITY_PROPERTIES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ADD_ENTITY_PROPERTIES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_ENTITY_PROPERTIES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_ENTITY_PROPERTIES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Layer Properties</para>
        /// <para><xdoc>
        ///   <para>Adds the list of CAD-specific Layer property fields to the input table</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Adds the list of CAD-specific Layer property fields to the input table. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Does not add the list of CAD-specific Layer property fields to the input table.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将特定于 CAD 的图层属性字段列表添加到输入表中</para>
        ///   <bulletList>
        ///     <bullet_item>选中 （Checked） - 将特定于 CAD 的图层属性字段列表添加到输入表中。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不将特定于 CAD 的图层属性字段列表添加到输入表中。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Layer Properties")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _LayerProps_value _LayerProps { get; set; } = _LayerProps_value._true;

        public enum _LayerProps_value
        {
            /// <summary>
            /// <para>ADD_LAYER_PROPERTIES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ADD_LAYER_PROPERTIES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_LAYER_PROPERTIES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_LAYER_PROPERTIES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Text Properties</para>
        /// <para><xdoc>
        ///   <para>Adds the list of CAD-specific Text property fields to the input table</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Adds the list of CAD-specific Text property fields to the input table. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Does not add the list of CAD-specific Text property fields to the input table.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将特定于 CAD 的“文本”属性字段列表添加到输入表中</para>
        ///   <bulletList>
        ///     <bullet_item>选中 （Checked） - 将特定于 CAD 的“文本”属性字段列表添加到输入表中。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 （Unchecked） - 不将特定于 CAD 的“文本”属性字段列表添加到输入表中。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Text Properties")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _TextProps_value _TextProps { get; set; } = _TextProps_value._true;

        public enum _TextProps_value
        {
            /// <summary>
            /// <para>ADD_TEXT_PROPERTIES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ADD_TEXT_PROPERTIES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_TEXT_PROPERTIES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_TEXT_PROPERTIES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Document Properties</para>
        /// <para><xdoc>
        ///   <para>Adds the list of CAD-specific Document property fields to the input table</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Adds the list of CAD-specific Document property fields to the input table. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Does not add the list of CAD-specific Document property fields to the input table.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将特定于 CAD 的文档属性字段列表添加到输入表中</para>
        ///   <bulletList>
        ///     <bullet_item>选中 （Checked） - 将特定于 CAD 的文档属性字段列表添加到输入表中。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 （Unchecked） - 不将特定于 CAD 的文档属性字段列表添加到输入表中。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Document Properties")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _DocProps_value _DocProps { get; set; } = _DocProps_value._true;

        public enum _DocProps_value
        {
            /// <summary>
            /// <para>ADD_DOCUMENT_PROPERTIES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ADD_DOCUMENT_PROPERTIES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_DOCUMENT_PROPERTIES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_DOCUMENT_PROPERTIES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Add CAD XData Property Fields</para>
        /// <para><xdoc>
        ///   <para>Adds the list of CAD-specific XData property fields to the input table</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Adds the list of CAD-specific XData property fields to the input table. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Does not add the list of CAD-specific XData property fields to the input table.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将特定于 CAD 的 XData 属性字段列表添加到输入表中</para>
        ///   <bulletList>
        ///     <bullet_item>选中 （Checked） - 将特定于 CAD 的 XData 属性字段列表添加到输入表中。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 （Unchecked） - 不将特定于 CAD 的 XData 属性字段列表添加到输入表中。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Add CAD XData Property Fields")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _XDataProps_value _XDataProps { get; set; } = _XDataProps_value._true;

        public enum _XDataProps_value
        {
            /// <summary>
            /// <para>ADD_XDATA_PROPERTIES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ADD_XDATA_PROPERTIES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_XDATA_PROPERTIES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_XDATA_PROPERTIES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Updated Input Table</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Input Table")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_table { get; set; }


        public AddCADFields SetEnv(object extent = null, object scratchWorkspace = null, object workspace = null)
        {
            base.SetEnv(extent: extent, scratchWorkspace: scratchWorkspace, workspace: workspace);
            return this;
        }

    }

}